/*
https://www.luogu.com.cn/problem/P1135
作业–奇怪的电梯做法：
使用BFS处理。从A 号开始，分别向上和向下扩展。
每个结点记录楼层状态，包括当前楼层和按几次按钮。
*/
#include <bits/stdc++.h>
using namespace std;
struct node {
    int floor, d;  //队列中记录的层数和按钮次数
    node(int a = 0, int b = 0) {
        floor = a;
        d = b;
    }
};
queue<node> Q; // 广度优先搜索的队列
int k[205], vis[205], n, a, b;
int main() {
    cin >> n >> a >> b;
    for(int i = 1; i <= n; i++)
        cin >> k[i];
    Q.push(node(a, 0)); //将初始元素加入到队列
    vis[a] = 1;  //记录初始楼层已访问过
    node now;
    while (!Q.empty()) { // 当队列 Q 非空时处理队列
        now = Q.front(); // 取队首元素
        Q.pop(); // 弹出队首元素
        if (now.floor == b) break;  // 找到目标解
        int dist = now.floor + k[now.floor]; // 往上
        if (dist <= n && vis[dist] == 0) { // 合法未访问过该楼层
            Q.push(node (dist, now.d + 1));
            vis[dist] = 1;  // 该楼层为已访问过
        }
        dist = now.floor - k[now.floor]; // 往下
        if (dist >= 1 && vis[dist] == 0) { // 合法未访问过该楼层
            Q.push(node (dist, now.d + 1));
            vis[dist] = 1;  // 该楼层为已访问过
        }
    }
    if (now.floor == b) // 找到目标解
        cout << now.d << endl;
    else // 无法到达
        cout << -1 << endl;
}

/*
g++ bfs/bfs_4.cpp && echo "5 1 5
3 3 1 2 5" | ./a.out
*/